#!/usr/bin/python
# -*- encoding:utf-8 -*-

# Imports de librairies
from tweepy import *
import curses, ConfigParser, os, locale, sys

class Cuicui:
	
	""" Classe principale : fait tout... """

	# Informations sur CuiCui
	app_name = "Cuicui"
	app_logo = "\n \\\\_o>\n  \\_/\n"
	app_version = "0.1"
	app_author = "MARTIN Damien <le.pere.porcher@gmail.com>"

	# Informations compte
	user_login = ""
	user_password = ""

	# Informations interface graphique
	stdscr = None
	screen = None
	width = 0
	height = 0
	width_right_column = 25
	last_update = 0
	update_delay = 1600

	# thread
	current_thread = "home" # home, public, at
	tweets = []


	def __init__(self):
	
		""" Constructeur (charge les parametres """
		
		print self.app_logo
		print self.app_name, " - ver. ", self.app_version
		print self.app_author, "\n\n"
		
		# Chargement des paramètres de configuration
		self.charger_parametres()

		# Ouverture de la connexion avec Twitter
		self.api = API(BasicAuthHandler(self.user_login, self.user_password))
		self.api.retry_count = 2
		self.api.retry_delay = 3

		# Initialisation de Curses
		self.stdscr = curses.initscr()
		curses.noecho()
		curses.cbreak()
		self.stdscr.keypad(1)
		self.screen = self.stdscr.subwin(self.height, self.width, 0, 0)
		self.screen.box()
		self.screen.hline(0, 0, curses.ACS_HLINE, 10)

		# Affichage de l'interface (Curses)
		self.afficher()

		# Lancement de l'interraction utilisateur
		self.gerer_actions()


	def charger_parametres(self):
		
		""" Charge les paramètres de configuration depuis ~/.cuicuirc """
		
		# Récpération du dossier utilisateur
		fichier = os.path.join(os.getenv("HOME"), ".cuicuirc")

		# Chargement du fichier
		conf = ConfigParser.ConfigParser()
		conf.readfp(open(fichier))

		#self.update_delay = conf.get("twitter", "update_delay")

		self.user_login = conf.get("twitter", "login")
		self.user_password = conf.get("twitter", "password")


	def afficher(self):
		
		""" Affiche les informations à l'écran """

		titre_fenetre = " %s ver. %s [%s]" % (self.app_name, self.app_version, self.user_login)

		self.stdscr.addstr(0, 0, titre_fenetre, curses.A_REVERSE)

		#default_locale = locale.getlocale()
		#locale.setlocale(locale.LC_ALL, "")

		# Affichage des tweets
		bcl = 0
		for tweet in self.tweets:
			message = "%s" % tweet.text
			self.stdscr.addstr(bcl + 1, 1, message)
			bcl = bcl + 1

		#locale.setlocale(locale.LC_ALL, default_locale)

		# Mise à jour de l'écran
		self.screen.refresh()
		self.stdscr.refresh()


	def recharger_thread(self):

		""" Recharge les tweets """

		# Récupération du bon flux
		try:
			if self.current_thread == "home": self.tweets = self.api.home_timeline()
			#elif self.current_thread == "public" : self.tweets = self.api.public_timeline()
			#elif self.current_thread == "at" : self.tweets = {}
			pass
		except:
			print "Erreur : ", sys.exc_info()[0]
			raise


	def gerer_actions(self):

		""" Gére les actions utilisateur """

		while True:
			
			# On regarde si on dois recharger les infos et mettre à jours l’affichage

			self.recharger_thread()	# Recharge les threads
			self.afficher()			# Rafraichis l'interface graphique

			c = self.stdscr.getch()	# Scanne une touche

			# Gestion des actions utilisateurs
			if c == ord('q'): break	# Quitt le programme
			elif c == ord(): pass


	def quit(self):

		""" Ferme la connexion à twitter et arrête curses proprement """

		curses.nocbreak()
		curses.echo()
		self.stdscr.keypad(0)
		curses.endwin()

		pass


# Point d'entrée principale
if __name__ == '__main__':

	instance = Cuicui()
	instance.quit()
